In [1]:
def isSorted[A](as: Array[A], ordered: (A, A) => Boolean): Boolean = {
def loop(n: Int): Boolean =
if (n == as.length -1) true
else if (ordered(as(n), as(n+1))) loop(n+1)
else false
loop(0)
}
Out[1]:
In [2]:
def bigger(a: Int, b: Int): Boolean =
a < b
Out[2]:
In [3]:
isSorted(Array(1, 3, 2), bigger)
Out[3]:
In [4]:
// 입력값이 9와 같은지 검사하는 익명함수
(x: Int) => x == 9 // REPL에서 결과로 함수 타입과 함께
// = 우측에 <function1> 으로 함수의 인수 갯수를 나타냄
Out[4]:
In [5]:
(a: Int, b: Int) => a == b
Out[5]:
In [6]:
isSorted(Array(7,3,2,1), (a: Int, b: Int) => a > b)
Out[6]:
In [7]:
def partial1[A,B,C](a: A, f: (A, B) => C): B => C =
(b: B) => f(a, b)
// 아래의 구현은 같은 스칼라의 타입추론을 이용하여 조금더 간략화한 버전
def partial1_[A,B,C](a: A, f: (A, B) => C): B => C =
f(a, _)
Out[7]:
In [8]:
def curry[A,B,C](f: (A, B) => C): A => (B => C) = {
(a: A) => (b: B) => f(a, b)
}
// 아래의 구현은 같은 스칼라의 타입추론을 이용하여 조금더 간략화한 버전
def curry2[A,B,C](f: (A, B) => C): A => (B => C) = {
(a: A) => f(a, _: B)
}
def curry3[A,B,C](f: (A, B) => C): A => (B => C) = {
a => f(a, _: B)
}
Out[8]:
In [9]:
def uncurry[A,B,C](f: A => B => C): (A, B) => C =
(a: A, b: B) => f(a)(b)
// 아래의 구현은 같은 타입추론을 이용하여 조금더 간략화한 버전
def uncurry2[A,B,C](f: A => B => C): (A, B) => C =
(a, b) => f(a)(b)
def uncurry3[A,B,C](f: A => B => C): (A, B) => C =
f(_: A)(_: B)
Out[9]:
In [10]:
def compose[A,B,C](f: B => C, g: A => B): A => C =
(a: A) => f(g(a))
// 아래의 구현은 같은 타입추론을 이용하여 조금더 간략화한 버전
def compose2[A,B,C](f: B => C, g: A => B): A => C =
(a) => f(g(a))
Out[10]:
In [ ]: